package com.mrogrape.gui;

import javax.swing.JPanel;

import com.mrogrape.gui.event.WizardPageData;

/**
 * 用于PageContainer的子面板，用户定义的面板需要实现此类。
 * 
 * @author Ice Spring
 * @version 1.1.0 201211121324u2
 */
public abstract class WizardPage extends JPanel {

	/** serialVersionUID */
	private static final long serialVersionUID = 1L;

	/**
	 * 当允许回到上一个Page时，返回true。
	 * @return
	 */
	public abstract boolean isCanBack();

	/**
	 * 如果在当前Page显示时允许点击Cancel按钮，则返回true。
	 * @return
	 */
	public abstract boolean isCancelable();

	/**
	 * 如果允许点击Finish按钮，则返回true。
	 * @return
	 */
	public abstract boolean isFinishable();

	/**
	 * 当还有下一个Page需要被显示时，返回true。
	 * @return
	 */
	public abstract boolean isHasNext();

	/**
	 * 如果此Page是可循环利用的，则返回true。
	 * @return
	 */
	public abstract boolean isRecycle();

	/**
	 * 当点击PageContainer上的Back按钮时此方法被调用。
	 * @param data
	 * @return
	 */
	protected abstract boolean onBack(WizardPageData data);

	/**
	 * 当点击PageContainer上的Cancel按钮时此方法被调用。
	 * @param data
	 * @return
	 */
	protected abstract boolean onCancel(WizardPageData data);

	/**
	 * 当Page创建时此方法被调用。
	 * @param data
	 */
	protected abstract void onCreate(WizardPageData data);

	/**
	 * 当Page被释放时，此方法被调用。
	 */
	protected abstract void onDispose();

	/**
	 * 当点击PageContainer上的Finish按钮时此方法被调用。
	 * @param data
	 * @return
	 */
	protected abstract boolean onFinish(WizardPageData data);

	/**
	 * 当点击PageContainer上的Next按钮时此方法被调用。
	 * @param data
	 * @return
	 */
	protected abstract String onNext(WizardPageData data);


}
